package com.zenithmind.coding.service;

import com.zenithmind.coding.pojo.vo.ProblemVO;

import java.util.List;

/**
 * 问题收藏服务接口 - 遵循接口隔离原则，专门处理问题收藏相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ProblemFavoriteService {

    /**
     * 收藏问题
     * 
     * @param problemId 问题ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean favoriteProblem(String problemId, String userId);

    /**
     * 取消收藏问题
     * 
     * @param problemId 问题ID
     * @param userId 用户ID
     * @return 是否成功
     */
    Boolean unfavoriteProblem(String problemId, String userId);

    /**
     * 获取用户收藏的问题
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getUserFavoriteProblems(String userId, Integer limit);

    /**
     * 检查收藏状态
     * 
     * @param problemId 问题ID
     * @param userId 用户ID
     * @return 是否已收藏
     */
    Boolean checkFavoriteStatus(String problemId, String userId);

    /**
     * 批量收藏问题
     * 
     * @param problemIds 问题ID列表
     * @param userId 用户ID
     * @return 成功收藏数量
     */
    Integer batchFavoriteProblems(List<String> problemIds, String userId);

    /**
     * 批量取消收藏
     * 
     * @param problemIds 问题ID列表
     * @param userId 用户ID
     * @return 成功取消收藏数量
     */
    Integer batchUnfavoriteProblems(List<String> problemIds, String userId);

    /**
     * 获取用户收藏统计
     * 
     * @param userId 用户ID
     * @return 收藏统计
     */
    Object getUserFavoriteStatistics(String userId);

    /**
     * 获取用户收藏分类
     * 
     * @param userId 用户ID
     * @return 收藏分类
     */
    Object getUserFavoriteCategories(String userId);

    /**
     * 获取用户收藏难度分布
     * 
     * @param userId 用户ID
     * @return 难度分布
     */
    Object getUserFavoriteDifficultyDistribution(String userId);

    /**
     * 搜索用户收藏的问题
     * 
     * @param userId 用户ID
     * @param keyword 关键词
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> searchUserFavoriteProblems(String userId, String keyword, Integer limit);

    /**
     * 按标签筛选用户收藏
     * 
     * @param userId 用户ID
     * @param tags 标签列表
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> filterUserFavoritesByTags(String userId, List<String> tags, Integer limit);

    /**
     * 按难度筛选用户收藏
     * 
     * @param userId 用户ID
     * @param difficulty 难度等级
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> filterUserFavoritesByDifficulty(String userId, Integer difficulty, Integer limit);

    /**
     * 导出用户收藏列表
     * 
     * @param userId 用户ID
     * @param format 导出格式
     * @return 导出数据
     */
    String exportUserFavoriteProblems(String userId, String format);
}
